/**
 * 导出CSV文件
 * @param {Blob} blob blob对象
 * @param {String} fileName 文件名
 */
export function exportCsv(blob, fileName) {
  if (window.navigator.msSaveOrOpenBlob) {
    // IE 浏览器
    window.navigator.msSaveOrOpenBlob(blob, fileName)
  } else {
    // 非IE浏览器
    const link = document.createElement('a')
    link.href = URL.createObjectURL(blob)
    link.download = fileName
    link.target = '_blank'
    document.body.appendChild(link)
    link.click()
    URL.revokeObjectURL(link.href)
    document.body.removeChild(link)
  }
}

/**
 * 将数据转换为CSV格式的字符串
 * @param {Array} data 数据数组
 * @param {Array} columns 列配置
 * @returns {String} CSV格式的字符串
 */
export function convertToCSV(data, columns) {
  // 添加表头
  let csvContent = columns.map(col => col.label || col.prop).join(',') + '\n'

  // 添加数据行
  csvContent += data.map(item => {
    return columns.map(col => {
      // 获取数据，如果有formatter则使用formatter，否则使用原始数据
      let value = item[col.prop]
      if (col.formatter) {
        value = col.formatter(item, col)
      }
      
      // 如果值包含逗号，引号，或换行符，则用引号包裹并转义引号
      value = String(value === null || value === undefined ? '' : value)
      if (value.includes(',') || value.includes('"') || value.includes('\n')) {
        value = '"' + value.replace(/"/g, '""') + '"'
      }
      
      return value
    }).join(',')
  }).join('\n')

  return csvContent
}

/**
 * 将数据导出为CSV文件
 * @param {Array} data 数据数组
 * @param {Array} columns 列配置
 * @param {String} fileName 文件名
 */
export function exportDataToCsv(data, columns, fileName) {
  const csvContent = convertToCSV(data, columns)
  const blob = new Blob(['\uFEFF' + csvContent], { type: 'text/csv;charset=utf-8' })
  exportCsv(blob, fileName)
}

/**
 * 处理导出API返回的blob响应
 * @param {Blob} response API返回的blob响应
 * @param {String} fileName 文件名
 */
export function handleExportResponse(response, fileName) {
  const blob = new Blob([response], { type: 'text/csv;charset=utf-8' })
  exportCsv(blob, fileName)
} 